package com.lunhui.service.provider.common;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * @author renminghe-kg
 */
@Aspect
@Component
public class UserCacheHandler {
    private static final Logger logger = LoggerFactory.getLogger(UserCacheHandler.class);
    /**
     * 定义一个切入点.
     * ("execution(public * com.group.*.web..*.*(..))")
     * 解释下：
     * 第一个 * 代表任意修饰符及任意返回值.
     * 第二个 * 任意包名
     * 第三个 * 代表任意方法.
     * 第四个 * 定义在web包或者子包
     * 第五个 * 任意方法
     * .. 匹配任意数量的参数.
     */
    @Pointcut("execution(public * com.lunhui.service.provider.*.controller..*.*(..)) " +
            "&& @annotation(com.lunhui.service.provider.common.UserCacheAsp)")
    public void cacheModify() {
    }

    /**
     * 在切点之前织入
     * @param joinPoint
     * @throws Throwable
     */
    @Before("cacheModify()")
    public void doBefore(JoinPoint joinPoint) {

        Object[] args = joinPoint.getArgs();
        System.out.println(args[0]);
    }

}